home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Delphi Magazine Collection 2001
/
Delphi Magazine Collection 20001 (2001).iso
/
DISKS
/
ISSUE03
/
EXPERTS
/
DLLSKEXP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-07-06
|
8KB
|
275 lines
unit Dllskexp;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Buttons, StdCtrls, ExptIntf, ToolIntf;
type
TDLLSKeletonGenerator = class(TForm)
Main: TGroupBox;
DLLLabel: TLabel;
DLLName: TEdit;
ExitCode: TGroupBox;
FunctionCheckBox: TCheckBox;
ProcedureCheckBox: TCheckBox;
Ok: TBitBtn;
Cancel: TBitBtn;
Help: TBitBtn;
ExampleCode: TGroupBox;
ExitProcCheckBox: TCheckBox;
BPWCompatibleCheckBox: TCheckBox;
ResourceCheckBox: TCheckBox;
procedure DLLNameChange(Sender: TObject);
procedure CancelClick(Sender: TObject);
procedure HelpClick(Sender: TObject);
procedure ExitProcCheckBoxClick(Sender: TObject);
procedure OkClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DLLSKeletonGenerator: TDLLSKeletonGenerator;
Type
TDLLSkeletonStandardExpert = class(TIExpert)
public
{ Expert Style }
function GetStyle: TExpertStyle; override;
{ Expert Strings }
function GetIDString: string; override;
function GetName: string; override;
function GetComment: string; override;
function GetGlyph: HBITMAP; override;
function GetState: TExpertState; override;
function GetMenuText: string; override;
{ Launch the Expert }
procedure Execute; override;
end;
TDLLSkeletonProjectExpert = class(TDLLSkeletonStandardExpert)
public
{ Expert Style }
function GetStyle: TExpertStyle; override;
{ Expert Strings }
function GetIDString: string; override;
function GetComment: string; override;
function GetGlyph: HBITMAP; override;
end;
procedure Register;
implementation
{$R *.DFM}
procedure TDLLSKeletonGenerator.DLLNameChange(Sender: TObject);
begin
ExitProcCheckBox.Caption := 'procedure '+DLLName.Text+'ExitProc;';
ResourceCheckBox.Caption := 'Include {$R '+DLLName.Text+'.RES};';
end;
procedure TDLLSKeletonGenerator.ExitProcCheckBoxClick(Sender: TObject);
{ if ExitProcChecked is False, then BPWCompatibleCheckBox is irrelevant,
otherwise it should be set to True by default.
}
begin
BPWCompatibleCheckBox.Checked := ExitProcCheckBox.Checked;
BPWCompatibleCheckBox.Enabled := ExitProcCheckBox.Checked
end;
procedure TDLLSKeletonGenerator.CancelClick(Sender: TObject);
begin
Close;
end;
procedure TDLLSKeletonGenerator.HelpClick(Sender: TObject);
begin
MessageDlg('Read the article in *The Delphi Magazine* for in-depth information'#13+
'on how to write your own Delphi Experts! (send an e-mail message'#13+
'to the editor Chris Frizelle at 70630.717@compuserve.com for free'#13+
'sample issue). Full source will be on subscribers'' disk...',
mtInformation, [mbOk], 0);
end;
procedure TDLLSKeletonGenerator.OkClick(Sender: TObject);
var f: System.Text;
begin
if (DLLName.Text <> '') and
((not FileExists(ExtractFileName(DLLName.Text)+'.PAS')) or
(MessageDlg('File '+ExtractFileName(DLLName.Text)+'.PAS exists. Overwrite?',
mtConfirmation, [mbYes,mbNo], 0) = IdYes)) then
begin
System.Assign(f,ExtractFileName(DLLName.Text)+'.PAS');
Rewrite(f);
writeln(f,'library ',ExtractFileName(DLLName.Text),';');
writeln(f,'{ Generated by DLL Skeleton Expert (c) 1995 by Dr.Bob for The Delphi Magazine }');
if ExitProcCheckBox.Checked and not BPWCompatibleCheckBox.Checked then
writeln(f,'uses WinTypes, WinProcs, SysUtils;')
else writeln(f,'uses WinTypes, WinProcs;');
writeln(f);
{ Resources }
if ResourceCheckBox.Checked then
begin
writeln(f,'{$R ',ExtractFileName(DLLName.Text),'.RES}');
writeln(f)
end;
{ Functions & Procedures }
if FunctionCheckBox.Checked then
begin
writeln(f,' function Max(X,Y: Integer): Integer; export;');
writeln(f,' begin');
writeln(f,' if X > Y then Max := X');
writeln(f,' else Max := Y');
writeln(f,' end {Max};');
writeln(f)
end;
if ProcedureCheckBox.Checked then
begin
writeln(f,' procedure Swap(var X,Y: Integer); export;');
writeln(f,' var Z: Integer;');
writeln(f,' begin');
writeln(f,' Z := X;');
writeln(f,' X := Y;');
writeln(f,' Y := Z');
writeln(f,' end {Swap};');
writeln(f)
end;
{ Exports }
if FunctionCheckBox.Checked or ProcedureCheckBox.Checked then
begin
write(f,'exports ');
if FunctionCheckBox.Checked then write(f,'max index 1');
if ProcedureCheckBox.Checked then
begin
if FunctionCheckBox.Checked then
begin
writeln(f,',');
write(f,' ':7);
end;
write(f,'swap index 2');
end;
writeln(f,';');
writeln(f)
end;
{ Exitproc }
if ExitProcCheckBox.Checked then
begin
if BPWCompatibleCheckBox.Checked then
begin
writeln(f,'var SaveExit: pointer;');
writeln(f)
end;
writeln(f,' procedure ',ExtractFileName(DLLName.Text),'ExitProc; far;');
writeln(f,' begin');
if BPWCompatibleCheckBox.Checked then
writeln(f,' ExitProc := SaveExit;');
writeln(f,' { WEP & cleanup }');
writeln(f,' end;');
writeln(f);
end;
{ Begin }
writeln(f,'begin');
if ExitProcCheckBox.Checked then
begin
if BPWCompatibleCheckBox.Checked then
begin
writeln(f,' SaveExit := ExitProc;');
writeln(f,' ExitProc := @',ExtractFileName(DLLName.Text),'ExitProc;')
end
else
writeln(f,' AddExitProc(',ExtractFileName(DLLName.Text),'ExitProc);')
end;
writeln(f,'end.');
System.Close(f);
if ToolServices <> nil then { I'm an expert!! }
begin
if ToolServices.CloseProject then
ToolServices.OpenProject(ExtractFileName(DLLName.Text)+'.PAS');
Close
end
end
end;
function TDLLSkeletonStandardExpert.GetStyle: TExpertStyle;
begin
Result := esStandard
end;
function TDLLSkeletonStandardExpert.GetIDString: String;
begin
Result := 'DrBob.StandardDLLSkExp'
end;
function TDLLSkeletonStandardExpert.GetComment: String;
begin
Result := '' { not needed for esStandard }
end;
function TDLLSkeletonStandardExpert.GetGlyph: HBITMAP;
begin
Result := 0 { not needed for esStandard }
end;
function TDLLSkeletonStandardExpert.GetName: String;
begin
Result := 'DLL Skeleton Generator'
end;
function TDLLSkeletonStandardExpert.GetState: TExpertState;
begin
Result := [esEnabled]
end;
function TDLLSkeletonStandardExpert.GetMenuText: String;
begin
Result := 'Dr.&Bob''s DLL Skeleton Expert...'
end;
procedure TDLLSkeletonStandardExpert.Execute;
begin
if not Assigned(DLLSkeletonGenerator) then
DLLSkeletonGenerator := TDLLSkeletonGenerator.Create(Application);
DLLSkeletonGenerator.Show;
DLLSkeletonGenerator.SetFocus
end;
{$R DLLSKEXP.RES}
Const
DLLSKEXPBITMAP = 666; { Bitmap ID }
function TDLLSkeletonProjectExpert.GetStyle: TExpertStyle;
begin
Result := esProject
end;
function TDLLSkeletonProjectExpert.GetIDString: String;
begin
Result := 'DrBob.ProjectDLLSkExp'
end;
function TDLLSkeletonProjectExpert.GetComment: String;
begin
Result := 'This Project Experts generates and opens a DLL Skeleton Source File'#13+
'DLL Skeleton Expert (c) 1995 by Dr.Bob for The Delphi Magazine';
end;
function TDLLSkeletonProjectExpert.GetGlyph: HBITMAP;
begin
Result := LoadBitMap(HInstance, MakeIntResource(DLLSKEXPBITMAP))
end;
procedure Register;
begin
RegisterLibraryExpert(TDLLSkeletonStandardExpert.Create);
RegisterLibraryExpert(TDLLSkeletonProjectExpert.Create)
end;
end.